﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebRamosUC.Models
{
    public partial class Seccion
    {
        /// <summary>
        /// Retorna los profesores de una seccion
        /// </summary>
        public IEnumerable<Profesor> GetProfesores()
        {

            return from profesorseccion in ProfesorSecciones
                   orderby profesorseccion.Profesor.NombreProfesor
                   select profesorseccion.Profesor;

        }

        /// <summary>
        /// Retorna los ayudantes de una seccion
        /// </summary>
        public IEnumerable<Ayudante> GetAyudantes()
        {

            return from ayudanteseccion in AyudanteSecciones
                   orderby ayudanteseccion.Ayudante.NombreAyudante
                   select ayudanteseccion.Ayudante;

        }

        public ConcreteAyudanteIterator GetAyudanteIterator()
        {
            ConcreteAyudanteIterator.UpdateReference();
            ConcreteAyudanteIterator iterador = ConcreteAyudanteIterator.Instance(this.GetAyudantes());
            return iterador;
        }

        /// <summary>
        /// retorna recomendaciones activas
        /// </summary>
        /// <returns></returns>
        public IEnumerable<Recomendacion> GetRecomendaciones()
        {
            return from rec in Recomendaciones
                   where rec.Activo
                       select rec;
        }

        /// <summary>
        /// Sigla de curso-numero seccion
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return Curso.Sigla+"-"+NumSeccion;
        }

        /// <summary>
        /// Nombre Curso-Sigla de curso-numero seccion
        /// </summary>
        /// <returns></returns>
        public string ToString2()
        {
            return Curso.ToString() + "-" + NumSeccion;
        }


        /// <summary>
        /// Retorna el promedio de las calificaciones que ha recibido esta seccion.
        /// Numeros enteros o ,5
        /// </summary>
        /// <returns></returns>
        public double CalificacionPromedio()
        {
            double promedio = CalificacionPromedioExacta();

            //Lo aproximamos a medios o enteros, pero no mas, pra las estrellitas

            int minimo = (int)promedio; //en minimo queda el numero entero

            promedio -= minimo; //en promedio quedan solo los decimales

            if (promedio < 0.25)
                promedio = 0;
            else if (promedio < 0.75)
                promedio = 0.5;
            else
                promedio = 1;

            // sumamos de nuevo el entero a promedio
            promedio += minimo;


            return promedio;
        }


        /// <summary>
        /// Retorna el promedio de las calificaciones que ha recibido esta secciom.
        /// </summary>
        /// <returns></returns>
        public double CalificacionPromedioExacta()
        {
            double result = 0.0;
            int count = 0;

            foreach (var rec in Recomendaciones)
            {
                if (rec.Activo)
                {
                    result += rec.Valor;
                    count++;
                }
            }

            return (count != 0) ? (result / count) : 0;   //Dejemos la division por cero para CHUCK NORRIS
        }

    }
}